热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

商业版|放入_Cloudera简介和安装部署概述

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Cloudera简介和安装部署概述相关的知识,希望对你有一定的参考价值。最近作者在研究Cloudera,并

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Cloudera简介和安装部署概述相关的知识,希望对你有一定的参考价值。


最近作者在研究Cloudera,并且在自己的虚拟机集群安装部署成功,所以在此做个分享,帮助大家尽快构建自己的Cloudera环境并运用起来。文章将会对Cloudera以及其安装时涉及到的组件做一个简单的介绍,并把官方文档中介绍的3种安装部署方式做一个概要的说明。


Cloudera简介

为了构建一个以数据为驱动的业务场景,我们需要一个强大的管理工具去统一并安全地管理我们的业务数据,所以Cloudera做为一个强大的数据中心管理工具为此孕育而生。Cloudera不光提供了自己衍化重新封装的市场领先并100%开源的商业化Apache Hadoop发行版本(CDH, Cloudera’s Distribution including Apache Hadoop)和相关的组件,其中包括了各类安全高效的企业级数据管理工具,如Hive, HBase,Oozie, Zookeeper等。 Hadoop是Apache(开源web服务器软件基金会)下的大数据开源项目,许多商业公司会在Apache Hadoop的基础上重新开发成商业版本,Cloudera公司就是其中之一,最近在维护的两个Hadoop版本分别是CDH4和CDH5。Hadoop使用分布式的思想存储,计算和分析数据,它允许多个数据分析计算任务同时作用在同一个数据块上并在集群上进行分布式计算,以此来进行超大规模数据的处理。Hadoop是大数据处理框架的鼻祖之一,同时Cloudera公司的Hadoop版本CDH也是目前使用最广泛的Hadoop商业版本。从广泛意义来说,CDH是Cloudera发布的一个自己封装的商业版软件发行包,里面不仅包含了Cloudera的商业版Hadoop,同时CDH中也包含了各类常用的开源数据处理存储框架,如Spark,Hive,HBase等。

Cloudera作为一个强大的商业版数据中心管理工具,提供了各种能够快速稳定运行的数据计算框架,如Apache Spark;使用Apache Impala做为对HDFS,HBase的高性能SQL查询引擎;也带了Hive数据仓库工具帮助用户分析数据; 用户也能用Cloudera管理安装HBase分布式列式NoSQL数据库;Cloudera还包含了原生的Hadoop搜索引擎以及Cloudera Navigator Optimizer去对Hadoop上的计算任务进行一个可视化的协调优化,提高运行效率;同时Cloudera中提供的各种组件能让用户在一个可视化的UI界面中方便地管理,配置和监控Hadoop以及其它所有相关组件,并有一定的容错容灾处理;Cloudera作为一个广泛使用的商业版数据中心管理工具更是对数据的安全决不妥协!

Cloudera主要发布了3个类型的产品。

QuickStarts产品是提供了不同的虚拟机镜像安装文件,里面已经提前安装和设置好了所有的Cloudera环境和相关组件,包括CDH,Cloudera Manager,Cloudera Impala,Cloudera Search等。其中对于集群版本选择QuickStart Docker,而单节点版本选择QuickStart VM;这些已经预装好所有组件以及环境的虚拟机镜像文件能帮助用户快速地测试和学习Cloudera。

Cloudera Manager产品则是着重于帮助大家管理自己的CDH集群,通过Cloudera Manager统一的UI界面来快速地自动配置和部署CDH和其相关组件,同时Cloudera Manager还提供了各种丰富的可自定义化的监视诊断和报告功能,集群上统一的日志管理功能,统一的集群配置管理和实时配置变更功能,多租户功能,高可用容灾部署功能和自动恢复功能等, 方便企业统一管理和维护自己的数据中心。Cloudera Manager产品也是我们主要的安装内容和介绍对象。它细分为免费的Express版本和功能完全并提供众多增值服务的收费版本Enterprise。QuickStarts和Cloudera Manager都属于是Cloudera Enterprise产品,

Cloudera Director是Cloudera Enterprise 5.2 发布时推出的第三个Cloudera产品,它的主要作用就是提供一个统一的管理和监视中心方便用户能在云服务提供商的服务器上部署CDH和其相关组件,并维护它们。目前Cloudera Director支持的云服务提供商包括亚马逊的AWS,微软的Azure, 谷歌的Google Cloud Platform等。至于对国内阿里云的支持程度作者暂时还没有进行了解。


图片来自:http://blog.cloudera.com/blog/2014/10/inside-cloudera-director/

Cloudera Manager的安装

Cloudera Manager可以说是Cloudera系列产品和组件的核心,它负责统一配置管理CDH集群,基本上本篇文章都是围绕CM的安装部署来展开的,然后再通过CM去安装CDH及其其它相关组件。


图片来自:http://www.cloudera.com/documentation/enterprise/latest/topics/cm_intro_primer.html#concept_wfj_tny_jk

由上面的结构图可知,Cloudera Manager的核心是Cloudera Manager Server。CM Server集成了Admin Console Web Server,提供了统一的UI和API方便用户和集群上的CDH以及其它服务进行交互,并实施监控和诊断等;CM Server还负责安装配置CDH和其相关的服务软件,启动停止服务,维护集群中各个节点服务器以及上面运行的进程。

CM Server主要由下面几个组件组成:
- Cloudera Manager Agent,安装在集群的所有节点上,负责启动和杀死各个CM管理的服务进程,解压和安装CM管理的服务,自动配置,通过心跳机制监视集群服务器状态(默认每15秒Agent发送心跳给CM Server)等。
- Management Service,主要是负责集群中各种服务的监视,通知,报告等功能。
- Database,内置数据库或者使用用户自定义的外部数据库保存CM的配置信息和监控信息。
- Cloudera Repository
- Clients,web-based的UI界面方便用户和CM Server进行交互,同时还提供了API供用户自定义Cloudera Manager程序。

本文中介绍的安装方式主要建立在CentOS6.X操作系统上。
CM的部署主要是安装以下几个组件:
- Oracle的Open JDK
- Cloudera Manager Server 和 Agent
- 数据库
- CDH和要使用的各个组件

Cloudera官方提供了3种主要的安装方式,大家可以根据自己的实际情况选择合适的方式。


PATH A - 使用Cloudera Manager Installer安装CM,然后再通过CM自动部署Oracle JDK,Embedded PostgreSQL,Cloudera Manager Agent,CDH和相关组件

PATH A的安装只适合用作对Cloudera快速的学习和测试,并不适用于实际生产环境的部署,因为它并不适合集群的横向扩容并且集群增长的时候还可能需要做数据迁移。


集群服务器准备

准备至少3台CentOS6.X的服务器,因为Zookeeper要求至少3台以上奇数的服务器才能启动。接着配置3台服务器之间的SSH免密登录,因为HDFS服务器之前的通信和服务的启动都是通过SSH的方式来进行。SSH免密登录的简单配置可以通过以下的方式:

#安装ssh-client
$yum install ssh-client
#在要进行免密登录的客户机上运行下面的命令,有提示时全部按回车就可以
$ssh-keygen
#这里的IP地址输入的是要远程免密登录的服务器IP地址
$ssh-copy-id 192.168.1.12

集群中每个服务器都需要关闭防火墙

$service iptables stop

关闭SELinux文件访问控制系统,修改/etc/selinux/config 配置文件中的”SELINUX=enforcing”为”SELINUX=disabled” 并重启操作系统。


数据库的安装

Cloudera Manager需要外部的数据库存储一些元数据信息,配置信息,系统和任务的运行信息等。在PATH A的方式下,Cloudera Manager Installer会自动安装内置的PostgreSQL数据库。当然用户也可以安装其它的数据库并配置成当前CM使用的数据库。


单用户模式配置

如果生产环境中的集群服务器不支持使用root用户,CM5.3以后推出了Single User Mode,可以让CM使用用户自定义的系统用户和用户组。本文中就不做详细介绍,默认使用root用户。


Python环境安装

CM需要运行在Python环境下,在CentOS6.X版本中,需要安装Python2.6来启动Cloudera Manager。Python环境的安装在CentOS系统中可以通过以下命令来进行安装
$yum install python26
不过建议安装之前检查自己的系统,因为默认CentOS中已经预装好Python环境了。


yum源的配置

在PATH A的安装方式下,主要使用yum去安装各个组件和依赖包,所以要保证网络的畅通以及能接入archive.cloudera.com地址。如果系统中自带的默认的yum源无法解析,大家可以去下载一份阿里云源。

#备份系统默认的yum源
$mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载并将yum源替换成阿里云
$wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

安装Oracle JDK

集群上所有的机器都需要安装JDK环境,默认Cloudera Manager Installer和Cloudera Manager都会自动在所有节点安装JDK环境,当然用户也可以选择自己手动配置JDK环境,这里我就不赘述了。


下载和安装Cloudera Manager Installer

用户可以进入Cloudera Manager产品页面,选择想要安装的Cloudera Manager版本并在页面中sign in和同意相应的协议后就能看到下载Cloudera Manager Installer的链接,并通过它去安装Cloudera Manager Server。同时我们可以看到Cloudera Manager Installer实际上就是一个*.bin文件,*.bin文件就是把*.sh文件和rpm安装包或者*.sh文件和zip包等封装成bin。当运行bin文件的时候就是使用*.sh脚本把zip解压,或者安装rpm包,或者使用yum安装软件的过程。

#去到你想要安装Cloudera Manager Server的目录中,并下载CM Installer
$wget https://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin
#给bin文件执行权限
$ chmod u+x cloudera-manager-installer.bin
#执行bin文件从网络上安装Cloudera Manager Server
$ sudo ./cloudera-manager-installer.bin

Cloudera Manager Installer开始执行后将会顺序完成以下几个任务
- 安装Oracle JDK和Cloudera Manager repository文件
- 安装Cloudera Manager Server 和 内置的PostgreSQL数据库
- 运行Cloudera Manager Server 和 内置的PostgreSQL数据库

在使用CM Installer安装的过程中需要下载Cloudera Manager Daemons的rpm安装包,必须先安装了CM Daemons才能运行CM Server,大概有500多M,会经常中断下不下来,建议大家可以在一个稳定的网络环境下先下下来,然后手动安装。

$yum localinstall –-nogpgcheck cloudera-manager-daemons-5.8.1-1.cm581.p0.7.el6.x86_64.rpm.rpm

Cloudera Manager Daemons的安装包地址:http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5/RPMS/x86_64/cloudera-manager-daemons-5.8.1-1.cm581.p0.7.el6.x86_64.rpm

整个Installer安装过程的日志在:/var/log/cloudera-manager-installer/ 目录下可以找到


登录Cloudera Manager Admin Console

当Cloudera Manager Installer安装配置完Cloudera Manager Server,以及CM Server所使用的内置数据库后,Installer会启动cloudera-scm-server服务。这时就可以通过http://localhost:7180 登录CM网页版的管理中心,默认用户名和密码都是admin,接着就可以通过CM管理中心自动安装配置CDH和相关服务。


使用CM自动安装CDH和相关组件

登录进去Admin Console后,在UI界面选择CDH安装方式的页面,只能选择使用Parcels或者Packages其中一种方式进行安装,如果之前已经手动安装了CDH以及其它组件的Packages,那么就无法使用parcel的方式进行安装。parcel是一个序列化后的二进制打包文件,附带着编程文件和一些元数据文件,是官方推荐使用的CDH安装方式之一。
可以指定从本地的parcel repository中安装或者远程连接parcel URL进行安装。这里作者选择使用本地的parcel repository进行安装。先从https://archive.cloudera.com/cdh5/parcels/5/中下载CDH的parcel包,主要是下载CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel,CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1,manifest.json这3个文件,然后把这些文件放入CM Server节点默认的parcel路径中/opt/cloudera/parcel-repo,最后在Admin Console中选择parcel安装的方式。

后续只要根据Admin Console的界面指引选择符合自己需求的配置,完成安装就可以了。CM Server会帮助用户完成绝大多数的配置。安装完成后可以通过在浏览器中输入http://Your_CM_Server_IP:50070 验证是否能打开HDFS控制台,如果是则证明安装成功。


PATH B - 使用yum,或者apt-get包管理工具或者Cloudera Parcels的方式下载安装Cloudera Manager Server,Cloudera Manager Agent,Oracle JDK,CDH以及其它服务。


集群服务器准备

准备至少3台CentOS6.X的服务器,因为Zookeeper要求至少3台以上奇数的服务器才能启动。接着配置3台服务器之间的SSH免密登录,因为HDFS服务器之前的通信和服务的启动都是通过SSH的方式来进行。SSH免密登录的简单配置可以通过以下的方式:

#安装ssh-client
$yum install ssh-client
#在要进行免密登录的客户机上运行下面的命令,有提示时全部按回车就可以
$ssh-keygen
#这里的IP地址输入的是要远程免密登录的服务器IP地址
$ssh-copy-id 192.168.1.12

集群中每个服务器都需要关闭防火墙

$service iptables stop

关闭SELinux文件访问控制系统,修改/etc/selinux/config 配置文件中的”SELINUX=enforcing”为”SELINUX=disabled” 并重启操作系统。


单用户模式配置

如果生产环境中的集群服务器不支持使用root用户,CM5.3以后推出了Single User Mode,可以让CM使用用户自定义的系统用户和用户组。本文中就不做详细介绍,默认使用root用户。


Python环境安装

CM需要运行在Python环境下,在CentOS6.X版本中,需要安装Python2.6来启动Cloudera Manager。Python环境的安装在CentOS系统中可以通过以下命令来进行安装
$yum install python26
不过建议安装之前检查自己的系统,因为默认CentOS中已经预装好Python环境了。


数据库的安装

Cloudera Manager需要外部的数据库存储一些元数据信息,配置信息,系统和任务的运行信息等。在PATH B的方式下,用户需要自己安装生产环境的数据库并配置成Cloudera Manager和Hive Metadata所使用的库。
当安装完数据库后,可以通过以下代码设置CM Server使用自定义的生产环境数据库

$/usr/share/cmf/schema/scm_prepare_database.sh database-type [options] database-name username password

以上代码执行后会顺序创建CM Server数据库的配置文件,并指定特定数据库以及特定的用户名和密码为CM Server使用的存储数据库环境。
接着需要下载数据库的连接驱动包,如mysql的驱动包配置如下:

$tar zxvf mysql-connector-java-5.1.31.tar.gz
$sudo cp mysql-connector-java-5.1.31/mysql-connector-java-5.1.31-bin.jar /usr/share/java/mysql-connector-java.jar

剩下就根据实际所使用的服务组件配置数据库和连接驱动包,如Hive Metastore,Sqoop等


设置Cloudera Manager Repository环境

Cloudera官方推荐使用yum,apt-get或者zypper等包管理工具来安装CM以及其相关的组件。和PATH A使用bin自动化安装CM Server并自动配置内置数据库的方式不同的是,PATH B中使用包管理工具安装CM Server,并且用户需要自己配置生产环境的数据库。
首先,需要下载Cloudera Manager的Repository文件,并拷贝到/etc/yum.repos.d/目录中作为yum源

$cd /etc/yum.repos.d/
$wget https://archive.cloudera.com/cm5/redhat/5/x86_64/cm/cloudera-manager.repo

安装Oracle JDK和Cloudera Manager

#安装Open JDK
$ sudo yum install oracle-j2sdk1.7
#安装Cloudera Manager Server和启动它需要的守护进程
$ sudo yum install cloudera-manager-daemons cloudera-manager-server

手动安装Cloudera Manager Agent

CM Agent负责启动和杀死各个CM管理的服务进程,解压和安装CM管理的服务,自动配置,通过心跳机制监视集群服务器状态(默认每15秒Agent发送心跳给CM Server)等

#集群上所有的节点包括主节点都需要安装CM Agent
$ sudo yum install cloudera-manager-agent cloudera-manager-daemons

接着需要在集群的所有节点上设置/etc/cloudera-scm-agent/config.ini文件中server-host和server-port两个属性,是CM Agent连接的CM Server进程所运行的服务器IP和端口。


手动安装CDH5和相关的组件

首选把CDH的RPM安装包下载下来,下载地址为:https://archive.cloudera.com/cdh5/one-click-install/redhat/7/x86_64/cloudera-cdh-5-0.x86_64.rpm?_ga=1.217368213.282215394.1469549288
然后输入如下命令进行安装

#安装CDH
$sudo yum --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm
#安装CDH相关的其它组件,如Hive,Impala,Spark等
$ sudo yum clean all
$ sudo yum install avro-tools crunch flume-ng hadoop-hdfs-fuse hadoop-hdfs-nfs3 hadoop-httpfs hadoop-kms hbase-solr hive-hbase hive-webhcat hue-beeswax hue-hbase hue-impala hue-pig hue-plugins hue-rdbms hue-search hue-spark hue-sqoop hue-zookeeper impala impala-shell kite llama mahout oozie pig pig-udf-datafu search sentry solr-mapreduce spark-core spark-master spark-worker spark-history-server spark-python sqoop sqoop2 whirr

启动Cloudera Manager Server和Agents

#在主节点上启动 Cloudera Manager Server
$ sudo service cloudera-scm-server start
#在集群的所有节点上输入下面的命令启动CM Agent
sudo service cloudera-scm-agent start

登录Cloudera Manager Admin Console

当Cloudera Manager Installer安装配置完Cloudera Manager Server,以及CM Server所使用的内置数据库后,Installer会启动cloudera-scm-server服务。这时就可以通过http://localhost:7180 登录CM网页版的管理中心,默认用户名和密码都是admin,接着就可以通过CM管理中心自动安装配置CDH和相关服务(如果之前没有选择手动的方式而是选择了由CM安装的方式)。


使用CM自动安装CDH和相关组件

登录进去Admin Console后,在UI界面选择CDH安装方式的页面,只能选择使用Parcels或者Packages其中一种方式进行安装,如果之前已经手动安装了CDH以及其它组件的Packages,那么就无法使用parcel的方式进行安装。parcel是一个序列化后的二进制打包文件,附带着编程文件和一些元数据文件,是官方推荐使用的CDH安装方式之一。
可以指定从本地的parcel repository中安装或者远程连接parcel URL进行安装。这里作者选择使用本地的parcel repository进行安装。先从https://archive.cloudera.com/cdh5/parcels/5/中下载CDH的parcel包,主要是下载CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel,CDH-5.8.0-1.cdh5.8.0.p0.42-el6.parcel.sha1,manifest.json这3个文件,然后把这些文件放入CM Server节点默认的parcel路径中/opt/cloudera/parcel-repo,最后在Admin Console中选择parcel安装的方式。

后续只要根据Admin Console的界面指引选择符合自己需求的配置,完成安装就可以了。CM Server会帮助用户完成绝大多数的配置。安装完成后可以通过在浏览器中输入http://Your_CM_Server_IP:50070 验证是否能打开HDFS控制台,如果是则证明安装成功。


PATH C - 使用Tar包的方式安装Cloudera Manager Server,Cloudera Manager Agent,CDH,JDK

PATH C的安装方式适合在离线的环境下进行Cloudera各个组件的安装,直接解压tar包,手动创建文件夹并将各个组件的tar包解压内容放置在这些创建的指定目录下,最后手动进行各项配置文件的配置,创建用户,数据库驱动包安装,数据库建表等。因为篇幅有限,作者将专门撰写一篇Cloudera的离线安装文档进行描述,就不在此进行详细描述了。

Cloudera Manager和CDH等组件部署成功后就可以见到如下的界面,可以看出来CM提供了许多强大的监控,报告和诊断服务,而且作者因为只是在笔记本电脑上用虚拟机来模拟集群,也没做任何优化配置,可以看多这个集群的健康状态非常差。后续作者会继续深入学习Cloudera,并不定期分享一些学习心得。


Toubleshooting

作者在部署成功没多久,整个Cloudera Manager Server就挂了。后来查看/var/log/cloudera-scm-server/loudera-scm-server.log 时发现主节点的JVM一直在做Full GC内存回收,并且“Stop the World”长达一分钟以上,明显是因为内存不够。这是因为作者使用的是虚拟机来部署,每个VM只分配了1GB的内存,后来给主节点分配了至少2GB的内存,问题就解决了。


推荐阅读
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
author-avatar
骚扰list_238
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有